<HTML>
<HEAD>
<!-- This HTML file has been created by texi2html 1.45
     from schintro.txi on 19 Febuary 1997 -->

<TITLE>An Introduction to Scheme and its Implementation - Table of Contents</TITLE>
</HEAD>
<BODY>
<H1>An Introduction to Scheme and its Implementation</H1>
<P>
<UL>
<LI><A NAME="SEC1" HREF="schintro_2.html#SEC1">Overview</A>
<UL>
<LI><A NAME="SEC2" HREF="schintro_3.html#SEC2">Scheme: A Small But Powerful Language</A>
<LI><A NAME="SEC3" HREF="schintro_4.html#SEC3">Who Is this Book For?</A>
<LI><A NAME="SEC4" HREF="schintro_5.html#SEC4">Why Scheme?</A>
<LI><A NAME="SEC5" HREF="schintro_5.html#SEC5">Why Scheme Now?</A>
<LI><A NAME="SEC6" HREF="schintro_6.html#SEC6">What this Book Is Not</A>
<LI><A NAME="SEC7" HREF="schintro_7.html#SEC7">Structure of this Book</A>
</UL>
<LI><A NAME="SEC8" HREF="schintro_8.html#SEC8">Introduction</A>
<UL>
<LI><A NAME="SEC9" HREF="schintro_9.html#SEC9">What is Scheme? (Hunk A)</A>
<LI><A NAME="SEC10" HREF="schintro_10.html#SEC10">Basic Scheme Features</A>
<UL>
<LI><A NAME="SEC11" HREF="schintro_11.html#SEC11">Code Consists of Expressions</A>
<UL>
<LI><A NAME="SEC12" HREF="schintro_12.html#SEC12">Parenthesized Prefix Expressions</A>
<LI><A NAME="SEC13" HREF="schintro_13.html#SEC13">Expressions Return Values, But May Have Side-Effects</A>
<LI><A NAME="SEC14" HREF="schintro_14.html#SEC14">Defining Variables and Procedures</A>
<LI><A NAME="SEC15" HREF="schintro_15.html#SEC15">Most Operators are Procedures</A>
<LI><A NAME="SEC16" HREF="schintro_16.html#SEC16">Definitions vs. Assignments</A>
<LI><A NAME="SEC17" HREF="schintro_17.html#SEC17">Special Forms</A>
<LI><A NAME="SEC18" HREF="schintro_18.html#SEC18">Control Structures are Expressions</A>
</UL>
<LI><A NAME="SEC19" HREF="schintro_19.html#SEC19">The Boolean Values <CODE>#t</CODE> and <CODE>#f</CODE></A>
<LI><A NAME="SEC20" HREF="schintro_20.html#SEC20">Some Other Control-Flow Constructs: <CODE>cond</CODE>, <CODE>and</CODE>, and <CODE>or</CODE></A>
<UL>
<LI><A NAME="SEC21" HREF="schintro_21.html#SEC21"><CODE>cond</CODE></A>
<LI><A NAME="SEC22" HREF="schintro_22.html#SEC22"><CODE>and</CODE> and <CODE>or</CODE></A>
<LI><A NAME="SEC23" HREF="schintro_22.html#SEC23"><CODE>not</CODE> is just a procedure</A>
</UL>
<LI><A NAME="SEC24" HREF="schintro_23.html#SEC24">Comments (Hunk C)</A>
<LI><A NAME="SEC25" HREF="schintro_24.html#SEC25">A Note about Parentheses and Indenting</A>
<UL>
<LI><A NAME="SEC26" HREF="schintro_25.html#SEC26">Let Your Editor Help You</A>
<LI><A NAME="SEC27" HREF="schintro_26.html#SEC27">Indenting Procedure Calls and Simple Control Constructs</A>
<LI><A NAME="SEC28" HREF="schintro_27.html#SEC28">Indenting <CODE>cond</CODE></A>
<LI><A NAME="SEC29" HREF="schintro_28.html#SEC29">Indenting Procedure Definitions</A>
</UL>
<LI><A NAME="SEC30" HREF="schintro_29.html#SEC30">All Values are Pointers to Objects</A>
<UL>
<LI><A NAME="SEC31" HREF="schintro_30.html#SEC31">All Values are Pointers</A>
<LI><A NAME="SEC32" HREF="schintro_31.html#SEC32">Most Implementations Optimize Away Many Pointers</A>
<LI><A NAME="SEC33" HREF="schintro_32.html#SEC33">Objects on the Heap</A>
</UL>
<LI><A NAME="SEC34" HREF="schintro_33.html#SEC34">Scheme Reclaims Memory Automatically</A>
<LI><A NAME="SEC35" HREF="schintro_34.html#SEC35">Objects Have Types, Variables Don't</A>
<UL>
<LI><A NAME="SEC36" HREF="schintro_34.html#SEC36">Dynamic typing</A>
</UL>
<LI><A NAME="SEC37" HREF="schintro_35.html#SEC37">The Empty List (Hunk E)</A>
</UL>
<LI><A NAME="SEC38" HREF="schintro_36.html#SEC38">Pairs and Lists</A>
<UL>
<LI><A NAME="SEC39" HREF="schintro_37.html#SEC39"><CODE>cdr-</CODE>linked lists</A>
<LI><A NAME="SEC40" HREF="schintro_38.html#SEC40">Lists and Quoting</A>
<LI><A NAME="SEC41" HREF="schintro_39.html#SEC41">Where the Empty List Got its Name</A>
<LI><A NAME="SEC42" HREF="schintro_40.html#SEC42">Some Handy Procedures that Operate on Lists</A>
<LI><A NAME="SEC43" HREF="schintro_41.html#SEC43"><CODE>length</CODE></A>
<UL>
<LI><A NAME="SEC44" HREF="schintro_42.html#SEC44"><CODE>list</CODE></A>
<LI><A NAME="SEC45" HREF="schintro_43.html#SEC45"><CODE>append</CODE></A>
<LI><A NAME="SEC46" HREF="schintro_44.html#SEC46"><CODE>reverse</CODE></A>
<LI><A NAME="SEC47" HREF="schintro_45.html#SEC47"><CODE>member</CODE></A>
</UL>
</UL>
<LI><A NAME="SEC48" HREF="schintro_46.html#SEC48">Recursion Over Lists and Other Data Structures</A>
<UL>
<LI><A NAME="SEC49" HREF="schintro_46.html#SEC49"><CODE>length</CODE></A>
<LI><A NAME="SEC50" HREF="schintro_46.html#SEC50">Copying Lists</A>
<LI><A NAME="SEC51" HREF="schintro_46.html#SEC51"><CODE>append</CODE> and <CODE>reverse</CODE></A>
<UL>
<LI><A NAME="SEC52" HREF="schintro_46.html#SEC52"><CODE>append</CODE></A>
<LI><A NAME="SEC53" HREF="schintro_46.html#SEC53"><CODE>reverse</CODE></A>
</UL>
</UL>
<LI><A NAME="SEC54" HREF="schintro_47.html#SEC54">Type and Equality Predicates (Hunk G)</A>
<UL>
<LI><A NAME="SEC55" HREF="schintro_48.html#SEC55">Type Predicates</A>
<LI><A NAME="SEC56" HREF="schintro_49.html#SEC56">Equality Predicates</A>
<LI><A NAME="SEC57" HREF="schintro_50.html#SEC57">Choosing Equality Predicates  (Hunk I)</A>
</UL>
<LI><A NAME="SEC58" HREF="schintro_51.html#SEC58">Quoting and Literals</A>
<UL>
<LI><A NAME="SEC59" HREF="schintro_52.html#SEC59">Simple Literals and Self-Evaluation</A>
</UL>
<LI><A NAME="SEC60" HREF="schintro_53.html#SEC60">Local Variables and Lexical Scope</A>
<UL>
<LI><A NAME="SEC61" HREF="schintro_54.html#SEC61"><CODE>let</CODE></A>
<UL>
<LI><A NAME="SEC62" HREF="schintro_55.html#SEC62">Indenting <CODE>let</CODE> Expressions</A>
</UL>
<LI><A NAME="SEC63" HREF="schintro_56.html#SEC63">Lexical Scope</A>
<UL>
<LI><A NAME="SEC64" HREF="schintro_57.html#SEC64">Binding Environments and Binding Contours</A>
<LI><A NAME="SEC65" HREF="schintro_58.html#SEC65">Block Structure Diagrams for <CODE>let</CODE>s</A>
</UL>
<LI><A NAME="SEC66" HREF="schintro_59.html#SEC66"><CODE>let*</CODE></A>
</UL>
<LI><A NAME="SEC67" HREF="schintro_60.html#SEC67">Procedures (Hunk K)</A>
<UL>
<LI><A NAME="SEC68" HREF="schintro_61.html#SEC68">Procedures are First Class</A>
<LI><A NAME="SEC69" HREF="schintro_62.html#SEC69">Higher-Order Procedures</A>
<LI><A NAME="SEC70" HREF="schintro_63.html#SEC70">Anonymous Procedures and <CODE>lambda</CODE></A>
<LI><A NAME="SEC71" HREF="schintro_64.html#SEC71"><CODE>lambda</CODE> and Lexical Scope (Hunk M)</A>
<LI><A NAME="SEC72" HREF="schintro_65.html#SEC72">Local Definitions</A>
<LI><A NAME="SEC73" HREF="schintro_66.html#SEC73">Recursive Local Procedures and <CODE>letrec</CODE></A>
<LI><A NAME="SEC74" HREF="schintro_67.html#SEC74">Multiple <CODE>define</CODE>s are like a <CODE>letrec</CODE></A>
<LI><A NAME="SEC75" HREF="schintro_68.html#SEC75">Variable Arity: Procedures that Take a Variable Number of Arguments</A>
<LI><A NAME="SEC76" HREF="schintro_69.html#SEC76"><CODE>apply</CODE></A>
</UL>
<LI><A NAME="SEC77" HREF="schintro_70.html#SEC77">Variable Binding Again</A>
<UL>
<LI><A NAME="SEC78" HREF="schintro_71.html#SEC78">Identifiers and Variables</A>
<LI><A NAME="SEC79" HREF="schintro_72.html#SEC79">Variables vs. Bindings vs. Values</A>
</UL>
<LI><A NAME="SEC80" HREF="schintro_73.html#SEC80">Tail Recursion (Hunk O)</A>
<LI><A NAME="SEC81" HREF="schintro_74.html#SEC81">Macros</A>
<LI><A NAME="SEC82" HREF="schintro_75.html#SEC82">Continuations</A>
<LI><A NAME="SEC83" HREF="schintro_76.html#SEC83">Iteration Constructs</A>
<LI><A NAME="SEC84" HREF="schintro_77.html#SEC84">Discussion and Review</A>
</UL>
<LI><A NAME="SEC85" HREF="schintro_79.html#SEC85">Using Scheme (A Tutorial)</A>
<UL>
<LI><A NAME="SEC86" HREF="schintro_80.html#SEC86">An Interactive Programming Environment  (Hunk B)</A>
<UL>
<LI><A NAME="SEC87" HREF="schintro_81.html#SEC87">Starting Scheme</A>
<LI><A NAME="SEC88" HREF="schintro_82.html#SEC88">Making mistakes and recovering from them</A>
<LI><A NAME="SEC89" HREF="schintro_83.html#SEC89">Returns and Parentheses</A>
<LI><A NAME="SEC90" HREF="schintro_84.html#SEC90">Interrupting Scheme</A>
<LI><A NAME="SEC91" HREF="schintro_85.html#SEC91">Exiting (Quitting) Scheme</A>
<LI><A NAME="SEC92" HREF="schintro_86.html#SEC92">Trying Out More Expressions</A>
<LI><A NAME="SEC93" HREF="schintro_87.html#SEC93">Booleans and Conditionals</A>
<LI><A NAME="SEC94" HREF="schintro_88.html#SEC94">Sequencing</A>
<LI><A NAME="SEC95" HREF="schintro_89.html#SEC95">Other Flow-of-control Structures</A>
<UL>
<LI><A NAME="SEC96" HREF="schintro_90.html#SEC96">Using <CODE>cond</CODE></A>
<LI><A NAME="SEC97" HREF="schintro_91.html#SEC97">Using <CODE>and</CODE> and <CODE>or</CODE></A>
</UL>
<LI><A NAME="SEC98" HREF="schintro_92.html#SEC98">Making Some Objects (Hunk D)</A>
<LI><A NAME="SEC99" HREF="schintro_93.html#SEC99">Lists (Hunk F)</A>
</UL>
<LI><A NAME="SEC100" HREF="schintro_94.html#SEC100">Using Predicates (Hunk H)</A>
<UL>
<LI><A NAME="SEC101" HREF="schintro_95.html#SEC101">Using Type Predicates</A>
<LI><A NAME="SEC102" HREF="schintro_96.html#SEC102">Using Equality Predicates</A>
</UL>
<LI><A NAME="SEC103" HREF="schintro_97.html#SEC103">Local Variables, <CODE>let</CODE>, and Lexical Scope (Hunk J)</A>
<LI><A NAME="SEC104" HREF="schintro_98.html#SEC104">Using First-Class, Higher-Order, and Anonymous Procedures (Hunk L)</A>
<UL>
<LI><A NAME="SEC105" HREF="schintro_98.html#SEC105">First-Class Procedures</A>
<LI><A NAME="SEC106" HREF="schintro_99.html#SEC106">Using and Writing Higher-Order Procedures</A>
</UL>
<LI><A NAME="SEC107" HREF="schintro_100.html#SEC107">Interactively Changing a Program (Hunk N)</A>
<UL>
<LI><A NAME="SEC108" HREF="schintro_100.html#SEC108">Replacing Procedure Values</A>
<LI><A NAME="SEC109" HREF="schintro_100.html#SEC109">Loading Code from a File</A>
<LI><A NAME="SEC110" HREF="schintro_100.html#SEC110">Loading and Running Whole Programs</A>
</UL>
<LI><A NAME="SEC111" HREF="schintro_101.html#SEC111">Some Other Useful Data Types</A>
<UL>
<LI><A NAME="SEC112" HREF="schintro_102.html#SEC112">Strings</A>
<LI><A NAME="SEC113" HREF="schintro_103.html#SEC113">Symbols</A>
<UL>
<LI><A NAME="SEC114" HREF="schintro_104.html#SEC114">A Note on Identifiers</A>
</UL>
<LI><A NAME="SEC115" HREF="schintro_105.html#SEC115">Lists Again</A>
<UL>
<LI><A NAME="SEC116" HREF="schintro_105.html#SEC116">Heterogeneous Lists</A>
<LI><A NAME="SEC117" HREF="schintro_105.html#SEC117">Operations on Lists</A>
</UL>
</UL>
<LI><A NAME="SEC118" HREF="schintro_106.html#SEC118">Basic Programming Examples (Hunk P)</A>
<UL>
<LI><A NAME="SEC119" HREF="schintro_106.html#SEC119">An Error Signaling Routine</A>
<LI><A NAME="SEC120" HREF="schintro_106.html#SEC120"><CODE>map</CODE> and <CODE>for-each</CODE></A>
<UL>
<LI><A NAME="SEC121" HREF="schintro_106.html#SEC121"><CODE>map</CODE></A>
<LI><A NAME="SEC122" HREF="schintro_106.html#SEC122"><CODE>for-each</CODE></A>
</UL>
<LI><A NAME="SEC123" HREF="schintro_106.html#SEC123"><CODE>member</CODE> and <CODE>assoc</CODE>, and friends</A>
<UL>
<LI><A NAME="SEC124" HREF="schintro_106.html#SEC124"><CODE>member</CODE>, <CODE>memq</CODE>, and <CODE>memv</CODE></A>
<LI><A NAME="SEC125" HREF="schintro_106.html#SEC125"><CODE>assoc</CODE>, <CODE>assq</CODE>, and <CODE>assv</CODE></A>
</UL>
</UL>
<LI><A NAME="SEC126" HREF="schintro_107.html#SEC126">Procedural Abstraction</A>
<UL>
<LI><A NAME="SEC127" HREF="schintro_108.html#SEC127">Procedure Specialization</A>
<LI><A NAME="SEC128" HREF="schintro_109.html#SEC128">Procedure Composition</A>
<LI><A NAME="SEC129" HREF="schintro_110.html#SEC129">Currying</A>
</UL>
<LI><A NAME="SEC130" HREF="schintro_110.html#SEC130">Discussion and Review</A>
</UL>
<LI><A NAME="SEC131" HREF="schintro_111.html#SEC131">Writing an Interpreter</A>
<UL>
<LI><A NAME="SEC132" HREF="schintro_112.html#SEC132">Interpretation and Compilation</A>
<LI><A NAME="SEC133" HREF="schintro_113.html#SEC133">Implementing a Simple Interpreter</A>
<UL>
<LI><A NAME="SEC134" HREF="schintro_114.html#SEC134">The Read-Eval-Print Loop</A>
<LI><A NAME="SEC135" HREF="schintro_115.html#SEC135">The Reader</A>
<UL>
<LI><A NAME="SEC136" HREF="schintro_115.html#SEC136">Implementing <CODE>read</CODE></A>
<LI><A NAME="SEC137" HREF="schintro_115.html#SEC137">Implementing the <CODE>read</CODE> procedure</A>
<LI><A NAME="SEC138" HREF="schintro_115.html#SEC138">Comments on the Reader</A>
</UL>
<LI><A NAME="SEC139" HREF="schintro_116.html#SEC139">Recursive Evaluation</A>
<UL>
<LI><A NAME="SEC140" HREF="schintro_116.html#SEC140">Comments on the Arithmetic Evaluator</A>
</UL>
<LI><A NAME="SEC141" HREF="schintro_116.html#SEC141">A Note on Snarfing and Bootstrapping</A>
<UL>
<LI><A NAME="SEC142" HREF="schintro_116.html#SEC142">Snarfing</A>
<LI><A NAME="SEC143" HREF="schintro_116.html#SEC143">Bootstrapping and Cross-compiling</A>
</UL>
<LI><A NAME="SEC144" HREF="schintro_117.html#SEC144">Improving the Simple Interpreter</A>
<UL>
<LI><A NAME="SEC145" HREF="schintro_117.html#SEC145">Implementing top-level variable bindings</A>
<LI><A NAME="SEC146" HREF="schintro_117.html#SEC146">Running the improved interpreter</A>
</UL>
</UL>
<LI><A NAME="SEC147" HREF="schintro_118.html#SEC147">Discussion and Review</A>
</UL>
<LI><A NAME="SEC148" HREF="schintro_119.html#SEC148">Environments and Procedures</A>
<UL>
<LI><A NAME="SEC149" HREF="schintro_120.html#SEC149">Understanding <CODE>let</CODE> and <CODE>lambda</CODE></A>
<UL>
<LI><A NAME="SEC150" HREF="schintro_121.html#SEC150"><CODE>let</CODE></A>
<LI><A NAME="SEC151" HREF="schintro_122.html#SEC151"><CODE>lambda</CODE></A>
<UL>
<LI><A NAME="SEC152" HREF="schintro_122.html#SEC152">Procedures are Closures</A>
</UL>
</UL>
<LI><A NAME="SEC153" HREF="schintro_122.html#SEC153">Lambda is cheap, and Closures are Fast</A>
<LI><A NAME="SEC154" HREF="schintro_123.html#SEC154">An Interpreter with <CODE>let</CODE> and <CODE>lambda</CODE></A>
<UL>
<LI><A NAME="SEC155" HREF="schintro_123.html#SEC155">Nested Environments and Recursive Evaluation</A>
<LI><A NAME="SEC156" HREF="schintro_123.html#SEC156">Integrated, Extensible Treatment of Special Forms</A>
<LI><A NAME="SEC157" HREF="schintro_124.html#SEC157">Interpreting <CODE>let</CODE></A>
<LI><A NAME="SEC158" HREF="schintro_124.html#SEC158">Variable References and <CODE>set!</CODE></A>
<LI><A NAME="SEC159" HREF="schintro_125.html#SEC159">Interpreting <CODE>lambda</CODE> and Procedure Calling</A>
<UL>
<LI><A NAME="SEC160" HREF="schintro_125.html#SEC160">Mutual Recursion Between Eval and Eval-apply</A>
</UL>
</UL>
<LI><A NAME="SEC161" HREF="schintro_126.html#SEC161">Variants of <CODE>let</CODE>: <CODE>letrec</CODE> and <CODE>let*</CODE></A>
<UL>
<LI><A NAME="SEC162" HREF="schintro_126.html#SEC162">Understanding <CODE>letrec</CODE></A>
<UL>
<LI><A NAME="SEC163" HREF="schintro_126.html#SEC163">Using <CODE>letrec</CODE> and <CODE>lambda</CODE> to Implement Modules</A>
</UL>
<LI><A NAME="SEC164" HREF="schintro_126.html#SEC164"><CODE>let*</CODE></A>
</UL>
<LI><A NAME="SEC165" HREF="schintro_126.html#SEC165">Iteration Constructs</A>
<UL>
<LI><A NAME="SEC166" HREF="schintro_126.html#SEC166">Named <CODE>let</CODE></A>
</UL>
<LI><A NAME="SEC167" HREF="schintro_126.html#SEC167">Programming with Procedures and Environments</A>
<LI><A NAME="SEC168" HREF="schintro_126.html#SEC168">Exercises</A>
</UL>
<LI><A NAME="SEC169" HREF="schintro_127.html#SEC169">Recursion in Scheme</A>
<UL>
<LI><A NAME="SEC170" HREF="schintro_127.html#SEC170">Subproblems and Reductions (non-tail and tail calls)</A>
<LI><A NAME="SEC171" HREF="schintro_127.html#SEC171">The Continuation Chain</A>
<LI><A NAME="SEC172" HREF="schintro_127.html#SEC172">Exploiting Tail Recursion</A>
<UL>
<LI><A NAME="SEC173" HREF="schintro_127.html#SEC173">Passing Intermediate Values as Arguments</A>
<UL>
<LI><A NAME="SEC174" HREF="schintro_127.html#SEC174">Summing a List</A>
<LI><A NAME="SEC175" HREF="schintro_127.html#SEC175">Implementing <CODE>length</CODE> tail-recursively</A>
</UL>
<LI><A NAME="SEC176" HREF="schintro_127.html#SEC176"><CODE>reduce</CODE></A>
</UL>
<LI><A NAME="SEC177" HREF="schintro_127.html#SEC177">Iteration as Recursion</A>
<UL>
<LI><A NAME="SEC178" HREF="schintro_127.html#SEC178">named <CODE>let</CODE></A>
<LI><A NAME="SEC179" HREF="schintro_127.html#SEC179"><CODE>do</CODE></A>
</UL>
</UL>
<LI><A NAME="SEC180" HREF="schintro_128.html#SEC180">Quasiquotation and Macros</A>
<UL>
<LI><A NAME="SEC181" HREF="schintro_129.html#SEC181"><CODE>quasiquote</CODE></A>
<UL>
<LI><A NAME="SEC182" HREF="schintro_129.html#SEC182"><CODE>unquote-splicing</CODE></A>
</UL>
<LI><A NAME="SEC183" HREF="schintro_130.html#SEC183">Defining New Special Forms</A>
<UL>
<LI><A NAME="SEC184" HREF="schintro_130.html#SEC184">Macros vs. Procedures</A>
</UL>
<LI><A NAME="SEC185" HREF="schintro_130.html#SEC185">Implementing More Scheme Special Forms</A>
<UL>
<LI><A NAME="SEC186" HREF="schintro_130.html#SEC186"><CODE>let</CODE></A>
<LI><A NAME="SEC187" HREF="schintro_130.html#SEC187"><CODE>let*</CODE></A>
<LI><A NAME="SEC188" HREF="schintro_130.html#SEC188"><CODE>cond</CODE></A>
<LI><A NAME="SEC189" HREF="schintro_130.html#SEC189">Discussion</A>
</UL>
<LI><A NAME="SEC190" HREF="schintro_130.html#SEC190">Lisp-style Macros</A>
<UL>
<LI><A NAME="SEC191" HREF="schintro_130.html#SEC191">Ultra-simple Lispish Macros</A>
<UL>
<LI><A NAME="SEC192" HREF="schintro_130.html#SEC192">Better Lisp-style Macros</A>
<LI><A NAME="SEC193" HREF="schintro_130.html#SEC193">Problems With Lisp-Style Macros</A>
<LI><A NAME="SEC194" HREF="schintro_130.html#SEC194">Ugly Hacks Around Name Conflicts</A>
</UL>
</UL>
<LI><A NAME="SEC195" HREF="schintro_130.html#SEC195">Implementing Simple Macros and Quasiquote</A>
<UL>
<LI><A NAME="SEC196" HREF="schintro_130.html#SEC196">Implementing Simple Macros</A>
<LI><A NAME="SEC197" HREF="schintro_130.html#SEC197">Implementing <CODE>quasiquote</CODE> and <CODE>unquote</CODE></A>
<UL>
<LI><A NAME="SEC198" HREF="schintro_130.html#SEC198">Translating backquotes to <CODE>quasiquote</CODE></A>
<LI><A NAME="SEC199" HREF="schintro_130.html#SEC199"><CODE>quasiquote</CODE></A>
<LI><A NAME="SEC200" HREF="schintro_130.html#SEC200"><CODE>define-rewriter</CODE></A>
<LI><A NAME="SEC201" HREF="schintro_130.html#SEC201"><CODE>define-macro</CODE></A>
</UL>
</UL>
<LI><A NAME="SEC202" HREF="schintro_131.html#SEC202">Procedural Macros vs. Template-filling Macros</A>
<LI><A NAME="SEC203" HREF="schintro_132.html#SEC203">Programming Examples Using Macros</A>
</UL>
<LI><A NAME="SEC204" HREF="schintro_133.html#SEC204">Records and Object Orientation</A>
<UL>
<LI><A NAME="SEC205" HREF="schintro_133.html#SEC205">Records (Structures)</A>
<UL>
<LI><A NAME="SEC206" HREF="schintro_133.html#SEC206">Using Procedural Abstraction to Implement Data Abstraction</A>
<LI><A NAME="SEC207" HREF="schintro_133.html#SEC207">Automating the Construction of Abstract Data Types with Macros</A>
</UL>
<LI><A NAME="SEC208" HREF="schintro_133.html#SEC208">Simple Uses of OOP Objects</A>
<UL>
<LI><A NAME="SEC209" HREF="schintro_133.html#SEC209">Late Binding</A>
<LI><A NAME="SEC210" HREF="schintro_133.html#SEC210">Class Definitions and Slot Specifications</A>
<LI><A NAME="SEC211" HREF="schintro_133.html#SEC211">Generic Procedures and Methods</A>
</UL>
<LI><A NAME="SEC212" HREF="schintro_133.html#SEC212">Generic Procedures and Classes are First-Class</A>
<LI><A NAME="SEC213" HREF="schintro_133.html#SEC213">Implementing the Simple Object System</A>
<UL>
<LI><A NAME="SEC214" HREF="schintro_133.html#SEC214">Implementing <CODE>define-class</CODE></A>
<UL>
<LI><A NAME="SEC215" HREF="schintro_133.html#SEC215">class <CODE>&#60;&#60;class&#62;&#62;</CODE></A>
</UL>
<LI><A NAME="SEC216" HREF="schintro_133.html#SEC216">Implementing <CODE>define-generic</CODE></A>
<LI><A NAME="SEC217" HREF="schintro_133.html#SEC217">Implementing <CODE>define-method</CODE></A>
<UL>
<LI><A NAME="SEC218" HREF="schintro_133.html#SEC218">Installing Accessor Methods</A>
<LI><A NAME="SEC219" HREF="schintro_133.html#SEC219">Keyword options</A>
</UL>
<LI><A NAME="SEC220" HREF="schintro_133.html#SEC220">Inheritance</A>
<LI><A NAME="SEC221" HREF="schintro_133.html#SEC221">Overriding and Refining Inherited Methods</A>
<LI><A NAME="SEC222" HREF="schintro_133.html#SEC222">Late Binding and Inheritance</A>
<LI><A NAME="SEC223" HREF="schintro_133.html#SEC223">Implementing an Object System with Inheritance</A>
<LI><A NAME="SEC224" HREF="schintro_133.html#SEC224">Interfaces and Inheritance</A>
</UL>
<LI><A NAME="SEC225" HREF="schintro_133.html#SEC225">A More Advanced Object System and Implementation</A>
<UL>
<LI><A NAME="SEC226" HREF="schintro_133.html#SEC226">Language Features</A>
<UL>
<LI><A NAME="SEC227" HREF="schintro_133.html#SEC227">Purity</A>
<LI><A NAME="SEC228" HREF="schintro_133.html#SEC228">Encapsulation</A>
<LI><A NAME="SEC229" HREF="schintro_133.html#SEC229">Multiple Dispatching</A>
<LI><A NAME="SEC230" HREF="schintro_133.html#SEC230">Multiple Inheritance</A>
<LI><A NAME="SEC231" HREF="schintro_133.html#SEC231">Explictit Subtyping</A>
<LI><A NAME="SEC232" HREF="schintro_133.html#SEC232">Control Over Compilation</A>
<LI><A NAME="SEC233" HREF="schintro_133.html#SEC233">A Metaobject Protocol</A>
</UL>
<LI><A NAME="SEC234" HREF="schintro_133.html#SEC234">Implementation Improvements</A>
<UL>
<LI><A NAME="SEC235" HREF="schintro_133.html#SEC235">Factoring out Work at Compile Time</A>
<LI><A NAME="SEC236" HREF="schintro_133.html#SEC236">Supporting Runtime Changes</A>
<LI><A NAME="SEC237" HREF="schintro_133.html#SEC237">Faster Dynamic Dispatching</A>
<LI><A NAME="SEC238" HREF="schintro_133.html#SEC238">Compiling Slot Accessors And Methdos Inline</A>
<LI><A NAME="SEC239" HREF="schintro_133.html#SEC239">Exploiting Type Information</A>
<LI><A NAME="SEC240" HREF="schintro_133.html#SEC240">Advanced Compilation Techniques</A>
</UL>
</UL>
<LI><A NAME="SEC241" HREF="schintro_133.html#SEC241">Some Shortcomings of Standard Scheme for Object System Implementation</A>
<UL>
<LI><A NAME="SEC242" HREF="schintro_133.html#SEC242">Inability to Define Disjoint Types</A>
<LI><A NAME="SEC243" HREF="schintro_133.html#SEC243">Lack of Type Objects for Predefined Types</A>
<LI><A NAME="SEC244" HREF="schintro_133.html#SEC244">Lack of Weak Tables and Extensible Closure Types.</A>
<LI><A NAME="SEC245" HREF="schintro_133.html#SEC245">Standard Macros are Limited</A>
<LI><A NAME="SEC246" HREF="schintro_133.html#SEC246">Unspecified Time of Macro Processing</A>
<LI><A NAME="SEC247" HREF="schintro_133.html#SEC247">Lack of Type Declarations</A>
<LI><A NAME="SEC248" HREF="schintro_133.html#SEC248">Lack of a Standard <CODE>bound?</CODE> procedure</A>
</UL>
</UL>
<LI><A NAME="SEC249" HREF="schintro_134.html#SEC249">Other Useful Features</A>
<UL>
<LI><A NAME="SEC250" HREF="schintro_135.html#SEC250">Special Forms</A>
<LI><A NAME="SEC251" HREF="schintro_136.html#SEC251">Input-Output Facilities</A>
<UL>
<LI><A NAME="SEC252" HREF="schintro_137.html#SEC252"><CODE>read</CODE> and <CODE>write</CODE></A>
<LI><A NAME="SEC253" HREF="schintro_138.html#SEC253"><CODE>display</CODE></A>
<LI><A NAME="SEC254" HREF="schintro_139.html#SEC254">Ports</A>
<LI><A NAME="SEC255" HREF="schintro_140.html#SEC255"><CODE>with-input-</CODE>\dots{} Forms</A>
</UL>
<LI><A NAME="SEC256" HREF="schintro_140.html#SEC256">Useful Types and Associated Procedures</A>
<UL>
<LI><A NAME="SEC257" HREF="schintro_140.html#SEC257">Numeric Types</A>
<UL>
<LI><A NAME="SEC258" HREF="schintro_140.html#SEC258">Floating-Point Numbers</A>
<LI><A NAME="SEC259" HREF="schintro_140.html#SEC259">Arbitrary-Precision Integers</A>
<LI><A NAME="SEC260" HREF="schintro_140.html#SEC260">Ratios</A>
<LI><A NAME="SEC261" HREF="schintro_140.html#SEC261">Coercions and Exactness</A>
</UL>
<LI><A NAME="SEC262" HREF="schintro_140.html#SEC262">Vectors</A>
<LI><A NAME="SEC263" HREF="schintro_140.html#SEC263">Strings and Characters</A>
</UL>
</UL>
<LI><A NAME="SEC264" HREF="schintro_141.html#SEC264"><CODE>call-with-current-continuation</CODE></A>
<UL>
<LI><A NAME="SEC265" HREF="schintro_141.html#SEC265">Implementing a Better Read-Eval-Print Loop</A>
<LI><A NAME="SEC266" HREF="schintro_141.html#SEC266">Implementing Catch and Throw</A>
<LI><A NAME="SEC267" HREF="schintro_141.html#SEC267">Implementing Backtracking</A>
<LI><A NAME="SEC268" HREF="schintro_141.html#SEC268">Implementing Coroutines</A>
<LI><A NAME="SEC269" HREF="schintro_141.html#SEC269">Implementing Cooperative Multitasking</A>
<LI><A NAME="SEC270" HREF="schintro_141.html#SEC270">Caveats about <CODE>call-with-current-continuation</CODE></A>
</UL>
<LI><A NAME="SEC271" HREF="schintro_142.html#SEC271">A Simple Scheme Compiler</A>
<UL>
<LI><A NAME="SEC272" HREF="schintro_142.html#SEC272">What is a Compiler?</A>
<UL>
<LI><A NAME="SEC273" HREF="schintro_142.html#SEC273">What is an Interpreter?</A>
<LI><A NAME="SEC274" HREF="schintro_142.html#SEC274">OK, so what's a compiler?</A>
</UL>
<LI><A NAME="SEC275" HREF="schintro_142.html#SEC275">What Does a Compiler Generate?</A>
<LI><A NAME="SEC276" HREF="schintro_142.html#SEC276">Basic Structure of the Compiler</A>
<LI><A NAME="SEC277" HREF="schintro_142.html#SEC277">Data Representations, Calling Convention, etc.</A>
<UL>
<LI><A NAME="SEC278" HREF="schintro_142.html#SEC278">The Registers</A>
<LI><A NAME="SEC279" HREF="schintro_142.html#SEC279">The Evaluation Stack (or Eval Stack, for short)</A>
<LI><A NAME="SEC280" HREF="schintro_142.html#SEC280">The Continuation Chain</A>
<LI><A NAME="SEC281" HREF="schintro_142.html#SEC281">Environments</A>
<LI><A NAME="SEC282" HREF="schintro_142.html#SEC282">Closure Representation and Calling</A>
</UL>
<LI><A NAME="SEC283" HREF="schintro_142.html#SEC283">Continuations</A>
<UL>
<LI><A NAME="SEC284" HREF="schintro_142.html#SEC284">Applying a Procedure Doesn't Save the Caller's State</A>
<LI><A NAME="SEC285" HREF="schintro_142.html#SEC285">Continuation Saving</A>
<LI><A NAME="SEC286" HREF="schintro_142.html#SEC286">An Example</A>
<LI><A NAME="SEC287" HREF="schintro_142.html#SEC287">Generating Unique Labels</A>
</UL>
<LI><A NAME="SEC288" HREF="schintro_142.html#SEC288">More on Representations of Environments</A>
<LI><A NAME="SEC289" HREF="schintro_142.html#SEC289">Compiling Code for Literals</A>
<LI><A NAME="SEC290" HREF="schintro_142.html#SEC290">Compiling Code for Top-Level Variable References</A>
<LI><A NAME="SEC291" HREF="schintro_142.html#SEC291">Precomputing Local Variable Lookups using Lexical Scope</A>
<UL>
<LI><A NAME="SEC292" HREF="schintro_142.html#SEC292">Lexical Addressing and Compile-Time Environments</A>
<LI><A NAME="SEC293" HREF="schintro_142.html#SEC293">A Detailed Example</A>
</UL>
<LI><A NAME="SEC294" HREF="schintro_142.html#SEC294">Preserving Tail-Recursiveness using Compile-Time Continuations</A>
<UL>
<LI><A NAME="SEC295" HREF="schintro_142.html#SEC295">When Should We Save Continuations?</A>
<UL>
<LI><A NAME="SEC296" HREF="schintro_142.html#SEC296">Compiling Returns</A>
</UL>
</UL>
<LI><A NAME="SEC297" HREF="schintro_142.html#SEC297">Compiling Top-Level Expressions</A>
<LI><A NAME="SEC298" HREF="schintro_142.html#SEC298">Compiling <CODE>lambda</CODE> Expressions Inside Procedures</A>
<LI><A NAME="SEC299" HREF="schintro_142.html#SEC299">Compiling Top-level Definitions</A>
<LI><A NAME="SEC300" HREF="schintro_142.html#SEC300">Interfacing to the Runtime System</A>
<UL>
<LI><A NAME="SEC301" HREF="schintro_142.html#SEC301">Garbage Collection</A>
<UL>
<LI><A NAME="SEC302" HREF="schintro_142.html#SEC302">Safe Points</A>
<LI><A NAME="SEC303" HREF="schintro_142.html#SEC303">GC at Any Time</A>
</UL>
<LI><A NAME="SEC304" HREF="schintro_142.html#SEC304">Interrupts</A>
</UL>
<LI><A NAME="SEC305" HREF="schintro_142.html#SEC305">Advanced Compiler and Runtime System Techniques</A>
<UL>
<LI><A NAME="SEC306" HREF="schintro_142.html#SEC306">Inlining Small Procedures</A>
<LI><A NAME="SEC307" HREF="schintro_142.html#SEC307">Type Declarations and Type Analysis</A>
<LI><A NAME="SEC308" HREF="schintro_142.html#SEC308">Using More Hardware Registers</A>
<LI><A NAME="SEC309" HREF="schintro_142.html#SEC309">Closure Analysis</A>
<LI><A NAME="SEC310" HREF="schintro_142.html#SEC310">Register Allocating Loop Variables for Loops</A>
<LI><A NAME="SEC311" HREF="schintro_142.html#SEC311">Conventional Optimizations</A>
<LI><A NAME="SEC312" HREF="schintro_142.html#SEC312">Stack Caches</A>
</UL>
</UL>
<LI><A NAME="SEC313" HREF="schintro_143.html#SEC313">Concept Index</A>
</UL>
<HR>
<P>This document was generated on 19 Febuary 1997 using the
<A HREF="http://wwwcn.cern.ch/dci/texi2html/">texi2html</A>
translator version 1.45.</P>
</BODY>
</HTML>
